package com.dong.Arrays.arithemtic;

import java.util.Scanner;

/*
给定两个大小分别为 m 和 n 的正序（从小到大）数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。
 */
public class Demo2 {
    public static int [] nums1;
    public static int [] nums2;
    public static void main(String[] args) {
        double midle_number;
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入第一个数组");
        if (scanner.hasNextLine()) {
            String str = scanner.nextLine();
            String[] array2 = str.split(","); //定义一个字符串数组储存以逗号分离的输入
            nums1 = new int [array2.length];
            for (int i = 0; i < array2.length; i++) {
                nums1[i] =  Integer.parseInt(array2[i]);// String类型的整数转化成int类型的整数
            }
        }
        Scanner scanner2 = new Scanner(System.in);
        System.out.println("请输入第二个数组");
        if (scanner2.hasNextLine()) {
            String str = scanner2.nextLine();
            String[] array3 = str.split(","); //定义一个字符串数组储存以逗号分离的输入
            nums2 = new int [array3.length];
            for (int i = 0; i < array3.length; i++) {
                nums2[i] =  Integer.parseInt(array3[i]);// String类型的整数转化成int类型的整数
            }
        }
        midle_number = findMedianSortedArrays(nums1,nums2);
        System.out.println("中位数为："+ midle_number);

    }

    public static double findMedianSortedArrays(int[] nums1,int[] nums2){
        int[] nums3 = new int[nums1.length+nums2.length];
        int[] nums4 = new int[nums1.length+nums2.length];
        double middle = 0.0;
        //将数组1放到目标数组中，参数为：
        // 1.将要复制的数组  2.从将要复制的数组的第几个元素开始  3.目标数组   4.将要放到目标数组的那个位置   5.复制多少个元素
        System.arraycopy(nums1,0,nums3,0,nums1.length);
        System.arraycopy(nums2,0,nums3,nums1.length,nums2.length);
        for (int i = 0; i < nums3.length; i++) {
            System.out.println(nums3[i]);
        }
        nums4 = sort(nums3);
        if (nums4.length==0){
            System.out.println("您未输入数据");
        }
        else if (nums4.length==1){
            middle = nums4[0];
        }
        else if (nums4.length%2==0){
            middle =  (nums4[nums4.length/2 -1]+nums4[nums4.length/2 ])/2;
        }
        else {
            middle = nums4[(nums4.length-1)/2];
        }
        return middle;

    }

    public static int[] sort(int[] arrays){
        int temp = 0;
        // 外层循环判断我们要走多少次
        for (int i = 0; i < arrays.length-1; i++) {
            //内层循环，比较判断两个数，如果第一个数大，则交换位置，每轮比完最后一个数肯定最大，故下一轮可以少比一次
            for (int j = 0; j < arrays.length-1-i; j++) {
                if (arrays[j+1]<arrays[j]){
                    temp = arrays[j];
                    arrays[j] = arrays[j+1];
                    arrays[j+1] = temp;
                }
            }
        }
        return arrays;
    }
}



